发布于 

powerlevel10k 去除用户名或主机名显示

如果你不关心过程只想看解决方案请点击这里跳转

过程

因为zsh默认会显示用户名,而我的用户名用的是真实姓名,所以为了隐私需要隐藏,在bing了一下之后找到了个修改主题文件的解决方法,我按照教程放到了~/.zshrc里,但是没有生效(这里挖个坑) 教程链接

我看到了部分其他教程是将prompt_context() 放在主题文件中,但是我复制到主题文件后仍然无效

这个过程中顺带发现我的主题地址和其他教程里的不一样,其他教程里的主题文件路径是在

1
~/.oh-my-zsh/themes/xxx.zsh-theme

而我是在

1
~/.oh-my-zsh/custom/themes/powerlevel10k/powerlevel10k.zsh-theme

因而进一步发现了我没有首次配置后自动生成的~/.p10k文件,因为我的所有powerlevel10k自定义主题设置都是放在~.zhsrc的(我是按照这个教程直接设置我的终端 教程链接

开始确认要编写的文件确实是.zshrc没错后,怀疑是不是.zshrc的函数声明漏写了;教程中因为是直接放在主题文件下所以默认是函数,我没有修改直接复制到.zshrc,但是加上之后依然没有生效

我回看了第一个教程,确实是没有写声明的,问题很明显不是关于prompt_context() {}函数设置的

再进一步查找,我在p10k官网仓库的How do I add username and/or hostname to prompt?设置介绍下发现了一个名为 POWERLEVEL9K_LEFT_PROMPT_ELEMENTS的prompt设置函数(prompt在这里应该是提示符的意思,这里得吐槽下微软的蹩脚翻译,把prompt翻译为了“令人惊叹的”😅)

在我的.zshrc文件中查找这条函数,内容为:

1
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(user device virtualenv dir vcs newline prompt_char)

按照函数名,这些形参显然就是左边显示的内容

image-1
image-1

按照顺序,可以发现user= 用户名 device=主机名


现在知道了参数属性,只需要按照需要修改就好了,这里我希望只删除用户名,所以改为

1
2
#删除user
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(device virtualenv dir vcs newline prompt_char)

然后重载zsh使配置生效

1
2
#终端输入
zsh

完成!

image-2
image-2

解决方法

首先查看是否有~/.p10k文件

1
2
3
4
5
6
# 将此命令复制到终端中运行
if ls ~/.p10k >/dev/null 2>&1;then
echo "文件存在"
else
echo "文件不存在"
fi

如果有则在 .p10k文件中进行操作,如果没有则像我一样在.zshrc中进行操作

1
2
3
4
5
6
7
8
9
10
11
12
##找到并修改 POWERLEVEL9K_LEFT_PROMPT_ELEMENTS 设置
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(user device virtualenv dir vcs newline prompt_char)
# 如果要只显示用户名
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(device virtualenv dir vcs newline prompt_char)
# 如果要只显示主机名
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(user virtualenv dir vcs newline prompt_char)
# 如果要两个都不显示
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(virtualenv dir vcs newline prompt_char)

## 使配置生效
# 终端运行以重新载入zsh
zsh

enjoy p10K!